package com.haixiaoke.saas.repository.pojo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.haixiaoke.saas.repository.core.BaseEntity;
import lombok.Data;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 房屋配置对象 biz_housing_allocation
 *
 * @author qixi
 * @date 2023-04-10
 */
@Data
public class HousingAllocation extends BaseEntity {
    private static final long serialVersionUID = 1L;

    public static final Integer CHARGE_TYPE_IMMOBILIZATION = 0;// 固定收费
    public static final Integer CHARGE_TYPE_UN_IMMOBILIZATION = 1;// 时效收费


    public static final Integer APARTMENT_STATE_UN_UP = 0; //待上架
    public static final Integer APARTMENT_STATE_UP = 1; //上架
    public static final Integer APARTMENT_STATE_DOWN = 2; //下架

    /**
     * 短租
     */
    public static final Integer APARTMENT_TYPE_SHORT = 1;
    /**
     * 长租
     */
    public static final Integer APARTMENT_TYPE_LONG = 2;

    public static final Integer CLEANING_TYPE_YES = 0;      //清扫完毕
    public static final Integer CLEANING_TYPE_NO = 1;       //清扫中


    /**
     * 房屋配置id
     */
    private Long allocationId;

    /**
     * 房屋id
     */
    @NotNull(message = "房屋id不能为空")
    private String houseId;

    /**
     * 房屋ids
     */
    private List<String> houseIds;

    /**
     * 管家电话
     */
    @NotNull(message = "管家电话不能为空")
    private String stewardPhone;

    /**
     * 地址: 市 + 街道 + 小区名
     */
    private String address;

    /**
     * 小区名
     */
    private String communityName;

    /**
     * 房型
     * eg: 两房一厅一卫
     */
    private String houseType;


    /**
     * 公寓名
     * 小区名 + 户型
     * eg: 胜利小区 三房两厅
     */
    private String title;

    /**
     * 面积
     */
    private BigDecimal area;

    /**
     * 当前楼层
     */
    private Long floor;

    /**
     * 总楼层
     */
    private Long totalFloor;

    /**
     * 最低日均价
     */
    private Double dailyPrice;

    /**
     * 日均价
     */
    private Double averageDaily;

    /**
     * 上架状态：0待上架 1上架 2下架
     */
    private Integer apartmentState;

    /**
     * 月租价
     */
    private Double monthPrice;

    /**
     * 公寓类型 1短租公寓 2长租公寓
     */
    @NotNull(message = "公寓类型不得为空")
    private Integer apartmentType;

    /**
     * 清洁状态(0清洁完成 1清洁中)
     */
    private Integer cleaningType;

    /**
     * 押付方式id
     */
    private Long payTypeId;

    /**
     * 地铁站id
     */
    private String stationIds;

    /**
     * 地铁站ids
     */
    private List<Long> stationIdList;

    /**
     * 站台名称
     */
    private String stationNames;

    /**
     * 标签id
     */
    private String labelIds;

    /**
     * 标签ids
     */
    private List<Long> labelIdList;

    /**
     * 标签名称
     */
    private String labelNames;

    /**
     * 房屋配置明细
     */
    private List<HouseFacilitiesItem> facilitiesItems;

    /**
     * 房屋设施
     */
    private String facilitiesIds;

    /**
     * 房屋设施id接参
     */
    private List<Long> facilitiesIdList;

    /**
     * 景区id
     */
    private String attractionsIds;

    /**
     * 景区id接参
     */
    private List<Long> attractionsIdList;

    /**
     * 景区全名
     */
    private String attractionsFullNames;

    /**
     * 商区id
     */
    private String businessCircleIds;

    /**
     * 商区id接参
     */
    private List<Long> businessCircleIdList;

    /**
     * 商区全名
     */
    private String businessCircleNames;

    /**
     * 保洁费
     */
    @NotNull(message = "保洁费不能为空")
    @Min(value = 0, message = "保洁费必须大于等于0")
    private Double cleaningPrice;

    /**
     * 收费类型：0固定收费 1时效收费
     */
    private Integer chargeType;

    /**
     * 固定收费价格
     */
    private Double fixedPrice;

    /**
     * 时效收费价格(json格式)
     */
    private String agingPrice;

    /**
     * 时效收费价格接参
     */
    private Map<Integer, Double> agingPriceMap;

    /**
     * 押金
     */
    @Min(value = 0, message = "押金必须大于等于0")
    private Double cashPledge;

    /**
     * 装修情况id
     */
    @NotNull(message = "装修情况不能为空")
    private Long decorationId;

    /**
     * 房屋描述
     */
    @NotNull(message = "房屋描述不能为空")
    private String apartmentDescription;

    /**
     * 装修情况
     */
    private String decorationName;

    /**
     * 最小起租时间
     */
    @NotNull(message = "最小起租时间不能为空")
    private Long rentStartingTime;

    /**
     * 可租开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @NotNull(message = "可租开始时间不能为空")
    private Date rentableStartTime;

    /**
     * 可租结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @NotNull(message = "可租结束时间不能为空")
    private Date rentableEndTime;

    /**
     * 房屋照片路径
     */
    @NotNull(message = "房屋照片最少上传1张图片")
    private String apartmentPicture;

    /**
     * 自定义字段-房屋起租时间段，最小起租天数
     */
    private String rentDetailTime;
}
